/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：UICompositeUserDefineTab.js<br>
 * 日期：2016年9月20日<br>
 * 作者: 杨顺强<br>
 * 功能：自用自定义参数 tab页<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/
window.makeNamespace(window,"Rainier.UI.V2");
/**
 * 函数名称：com.rainier.application.UICompositeUserDefineTab<br>
 * 函数功能：文字说明的横线组件<br>
 * 参数输入：<br>
 * 异常信息：<br>
 */
Rainier.UI.V2.UICompositeUserDefineTab = Rainier.UI.V2.UIComposite.extend({
	
	NAME : "Rainier.UI.V2.UICompositeUserDefineTab",
	
	/**
	 * 函数名称：com.rainier.application.UICompositeUserDefineTab.init<br>
	 * 函数功能：组件初始化函数，完成对组件的初始化<br>
	 * 参数输入：objParentComposite ：UIComposite<br>
	 * 参数输入：objProperties : 	{}	参数对象。该参数为空对象。<br> 
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	init : function(parentcom,properties){
		this.userDefineTab 		 = null;
		this.componentsMap  	 = {};
		this.componentsInitValue = null;
		this.properties          = properties;
		this._super(parentcom,properties);
	},
	
	/**
	 * 函数名称：com.rainier.application.UICompositeUserDefineTab.createComposite<br>
	 * 函数功能：创建一个Tab页。用户自己定义的属性页<br>
	 * 参数输入：eleParent : 父节点元素<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	createComposite : function(parentcom){
		var _this = this;
		//创建Tab页。
		this.userDefineTab = new Rainier.UI.V2.UICompositeTab(parentcom,this.properties);
		var CheckBoxTextTextBoxBoxUnit1  = {
				optionName : "ABSTOL",
				checkbox   : true,	
				compositeComponent:{
					optionName :"ABSTOL",
					text	   : {
						style:"margin-left:20px;margin-top:5px;width:180px;float:left",
						text :"绝对电流误差(ABSTOL):"
					},
					textbox    : {
						width:150,
						height:25,
						value :"1e-012",
						required : true,
						validType:'checkFloat'
					},
					unit:"A"
				}
		};
		var  ABSTOLComponent = new Rainier.UI.V2.UICompositeCheckBoxTextTextBoxUnit(this.userDefineTab,CheckBoxTextTextBoxBoxUnit1);
		this.componentsMap = $.extend(this.componentsMap,{"ABSTOL":ABSTOLComponent});
		
		var CheckBoxTextTextBoxBoxUnit2  = {
				optionName : "VNTOL",
				checkbox   : true,	
				compositeComponent:{
					optionName :"VNTOL",
					text	   : {
						style:"margin-left:20px;margin-top:5px;width:180px;float:left",
						text :"相对电压误差(VNTOL):"
					},
					textbox    : {
						width:150,
						height:25,
						value :"1e-006",
						required : true,
						validType:'checkFloat'
					},
					unit:"V"
				}
		};
		var VNTOLComponent = new Rainier.UI.V2.UICompositeCheckBoxTextTextBoxUnit(this.userDefineTab,CheckBoxTextTextBoxBoxUnit2);
		this.componentsMap = $.extend(this.componentsMap,{"VNTOL":VNTOLComponent});
		
		var CheckBoxTextTextBoxBoxUnit3  = {
				optionName : "RELTOL",
				checkbox   : true,	
				compositeComponent:{
					optionName :"RELTOL",
					text	   : {
						style:"margin-left:20px;margin-top:5px;width:180px;float:left",
						text :"相对误差(RELTOL):"
					},
					textbox    : {
						width:150,
						height:25,
						value :"0.01",
						required : true,
						validType:'checkFloat'
					}
				}
		};
		var RELTOLComponent = new Rainier.UI.V2.UICompositeCheckBoxTextTextBoxUnit(this.userDefineTab,CheckBoxTextTextBoxBoxUnit3);
		this.componentsMap = $.extend(this.componentsMap,{"RELTOL":RELTOLComponent});
		
		var CheckBoxTextTextBoxBoxUnit4  = {
				optionName : "ITL4",
				checkbox   : true,	
				compositeComponent:{
					optionName :"ITL4",
					text	   : {
						style:"margin-left:20px;margin-top:5px;width:180px;float:left",
						text :"瞬态迭代次数上限(ITL4):"
					},
					textbox    : {
						width:150,
						height:25,
						value :"50",
						required : true,
						validType:'checkNumber'
					},
				}
		};
		var ITL4Component  = new Rainier.UI.V2.UICompositeCheckBoxTextTextBoxUnit(this.userDefineTab,CheckBoxTextTextBoxBoxUnit4);
		this.componentsMap = $.extend(this.componentsMap,{"ITL4":ITL4Component});
		
		var buttonPro = {
			style : "margin-left:340px;margin-top:70px;float:left;",
			button:{width:85,heigth:25,text:"恢复到默认值"}
		}
		var decrationButton = new Rainier.UI.V2.UICompositeDecorationButton(this.userDefineTab,buttonPro);
		this.restoreButton = decrationButton.getButton();
		

		var RestoreButtonListener = Rainier.UI.V2.UIEventListener.extend({
			NAME : "RestoreButtonListener",
			
			init : function(){
		            this._super();                  
	        },
		        
			onEvent : function(sEvent,objEventSource,objArgs){
				_this.restoreComponentValues();
				for(var option in _this.componentsMap){
					if(_this.componentsMap[option].getCheckBox()){
						_this.componentsMap[option].getCheckBox().setValue(false);
						_this.componentsMap[option].checkBoxValueChanged();
					}
				}
			}
		});
		this.restoreButton.registerEventListener("onClick",new RestoreButtonListener());
		
		this.componentsInitValue = this.getComponentsValues();
	},
	
	/**
	 * 函数名称：com.rainier.application.UICompositeUserDefineTab.makeSpice<br>
	 * 函数功能：根据tab页中的数据，形成对应的spice语句<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	makeSpice : function(){
		var objValues 	  =  this.getComponentsValues();
		var spiceSentence = ".options ";
		
		var arr = ['ABSTOL','VNTOL','RELTOL','ITL4'];
		$.each(arr,function(index,key){
			if(objValues[key])
				spiceSentence += key + "=" + objValues[key] + ' ';
		})
		return spiceSentence;
	},
	
	/**
	 * 函数名称：com.rainier.application.UICompositeUserDefineTab.getComponentsMap<br>
	 * 函数功能：向外提供该tab页中的组件对象{key：ComponentObj}<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：组件容器（组件的键值对对象）<br>
	 * 异常信息：无<br>
	 */
	getComponentsMap : function(){
		return this.componentsMap;
	},
	
	/**
	 * 函数名称：com.rainier.application.UICompositeUserDefineTab.getComponentsValues<br>
	 * 函数功能：获取当前组件中子组件的默认值<br>
	 * 参数输入：<br>
	 * 参数输出：<br>
	 * 函数返回：<br>
	 * 异常信息：<br>
	 */
	getComponentsValues : function(){
		var objValues = {};
		for(var option in this.componentsMap){
			//获取当前组件的值
			var componentValueObj = this.componentsMap[option].getComponentValueObj();
			objValues = $.extend(objValues,componentValueObj);
		}
		return objValues;
	},
	
	/**
	 * 函数名称：com.rainier.application.UICompositeUserDefineTab.<br>
	 * 函数功能：恢复默认值<br>
	 * 参数输入：<br>
	 * 参数输出：<br>
	 * 函数返回：<br>
	 * 异常信息：<br>
	 */
	restoreComponentValues : function(){
		for(var option in this.componentsMap){
			for(optionName in this.componentsInitValue){
				if(option === optionName){
					var value = this.componentsInitValue[optionName];
					this.componentsMap[option].setComponentValue(value);
				}
			}
		}
	}
});